'''
Description: 
Author: Zilu
Date: 2021-11-15 14:49:48
Version: 
LastEditTime: 2021-11-15 20:16:01
LastEditors: Zilu
'''

# # STMP是发送邮件的协议，Python内置对STMP的支持，
# # 可以发送纯文本、HTML以及带附件的邮件

# # email模块负责构造邮件，smtplib模块负责发送邮件
# from email.mime.text import MIMEText
# from email.policy import SMTP 
# msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')

# from_addr = input("From:")
# password = input("Password:")
# to_addr = input("To:")
# smtp_server = input("SMTP server:")

# import smtplib
# server = smtplib.SMTP(smtp_server, 25)  # SMTP协议默认是端口25
# server.set_debuglevel(1)
# server.login(from_addr, password)
# server.sendmail(from_addr, [to_addr], msg.as_string())
# server.quit()
# 我们用set_debuglevel(1)就可以打印出和SMTP服务器交互的所有信息。
# SMTP协议就是简单的文本命令和响应。login()方法用来登录SMTP服务器，sendmail()方法就是发邮件，
# 由于可以一次发给多个人，所以传入一个list，邮件正文是一个str，as_string()把MIMEText对象变成str

# 为了更友好地显示邮件主题、发件人等消息，需要向MIMEText中添加From、To、Subject等信息
from email import encoders
from email.header import Header
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr

import smtplib

# 注意不能简单地传入name <addr@example.com>，
# 因为如果包含中文，需要通过Header对象进行编码。
def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr((Header(name,'utf-8').encode(), addr))

from_addr = input('From:')
password = input('Password:')
to_addr = input('To:')
smtp_server = input('Server:')

msg = MIMEText('<html><body><h1>Hello</h1>' +
    '<p>send by <a href="http://www.python.org">Python</a>...</p>' +
    '</body></html>', 'html', 'utf-8')
msg['From'] = _format_addr('Python爱好者 <%s>' % from_addr)
msg['To'] = _format_addr('管理员 <%s>' % to_addr)
msg['Subject'] = Header('来自SMTP的问候……', 'utf-8').encode()

server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()

# 发送HTML
# 在构造MIMEText对象时，把HTML字符串传进去，再把第二个参数由plain变为html就可以了 

# 发送附件
# 可以构造一个MIMEMultipart对象代表邮件本身，然后往里面加上一个MIMEText作为邮件正文，
# 再继续往里面加上表示附件的MIMEBase对象即可
from email.mime.multipart import MIMEMultipart

msg = MIMEMultipart()
msg['From'] = _format_addr('Python爱好者 <%s>' % from_addr)
msg['To'] = _format_addr('管理员 <%s>' % to_addr)
msg['Subject'] = Header('来自SMTP的问候……', 'utf-8').encode()

msg.attach(MIMEText('send with file...', 'plain', 'utf-8'))

with open('image/1.jpg','rb') as f:
    # 设置附件的MIME和文件名
    mime = MIMEBase('image', 'jpeg', filename='1.jpg')
    # 加上必要的头信息
    mime.add_header('Content-Disposition', 'attachment', filename='1.jpg')
    mime.add_header('Content-ID', '<0>')
    mime.add_header('X-Attachment_Id', '0')
    # 将附件内容读进来
    mime.set_payload(f.read())
    # 用Base64编码
    encoders.encode_base64(mime)
    msg.attach(mime)

server = smtplib.SMTP(smtp_server, 25)
# server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()



